Reliable transport protocols, such as the transmission control protocol (TCP), have been tuned for traditional networks comprising wired links and stationary hosts. These protocols assume congestion in the network to be the primary cause for packet losses and unusual delays. Congestion occurs when the requirements of the source(s) exceeds the transport capability of the network or the reception capability of the receiver. For example, where multiple senders transmit packets to a network switch faster than the switch's buffer can forward the packets, congestion results and some received packets are lost by the switch.
Under the TCP protocol, an acknowledgment is usually, but not necessarily, transmitted for every packet. Because the TCP protocol is a byte-stream protocol, it also has the flexibility to send an acknowledgment for a sequence of bytes. The typical acknowledgment indicates the sequence number of the last consecutive packet successfully received; this type of acknowledgment is referred to as a cumulative acknowledgment. The acknowledgment is considered cumulative because it confirms that all messages up to the indicated packet have been properly received. Every time a receiver receives a group of packets, the receiver sends an acknowledgment identifying the last continuously complete sequence of received packets. For example, consider the case where one hundred packets are sent, but packets 59 and 61-100 are not received. When the receiver successfully receives packets 1-58, it will provide an acknowledgment that all packets up to packet 58 were received; when it successfully receives packet 60 but not packet 59, the receiver will again provide an acknowledgment that up to packet 58 was received. The second acknowledgment indicates that a packet was received out of sequence without receiving the next packet in sequence. Duplicate acknowledgments can indicate to the TCP protocol that a packet was lost. Most often the packet's loss is due to congestion and some form of congestion compensation is necessary such as reducing the window size. Several schemes exist to retransmit packet(s) sequentially after recognizing that a packet was lost.
As an alternative to cumulative acknowledgments, acknowledgments can be provided which indicate which specific packets were received in error; these acknowledgments are known as selective acknowledgments (SACKs). A SACK can be embodied as a bit map, for example, where each bit of the SACK represents a packet status: “1” for a particular packet sequence number indicates the packet was received without error and “0” indicates the packet was received in error or was not received at all.
The TCP protocol avoids congestion by utilizing acknowledgments from the receiver and adjusting a sliding window for the sender. Rather than sending a packet and waiting for an acknowledgment from the receiver before sending another packet, the sender keeps track of the total number of unacknowledged packets sent and continues to transmit packets as long as the number of unacknowledged packets does not exceed a specified window size. The sender dynamically adjusts the window size by probing the communication network to determine the network's capacity. As long as there is no loss, the window size is gradually increased. When a loss occurs, the window size is reduced and then slowly expanded. The sender can identify that a packet has been lost due to congestion either by the arrival of duplicate acknowledgments indicating a loss or by the absence of an acknowledgment being received within a timeout interval. This entire process of controlling the window size to limit congestion is known as flow control.
A number of compensation schemes can be used to reduce the window size upon detection of a congestion error and to gradually increase the window size back to the edge of error free operation. Such compensation schemes include the slow-start algorithm, fast recovery, and fast-retransmit. For example, under the slow-start algorithm, if the window size was one hundred packets when a congestion error occurred, the TCP protocol reduces the window size to one; the lost packet(s) is then retransmitted and the window size is expanded after each successful subsequent transmission by the number of packets last transmitted. In other words, the slow-start algorithm reduces the window size to one and then doubles the window size after each successful transmission as indicated by the reception of an acknowledgment (ACK).
When transmitted packets fail to be received by the sender for reasons other than congestion, however, congestion compensation measures, such as reducing the window size, result in an unnecessary reduction in end-to-end throughput and suboptimal performance. For example, wireless links are increasingly being used within a communication network. Transmission errors over wireless links are often due to reasons other than congestion, such as interference. Therefore, wireless links often suffer from sporadic high bit-error rates (BERs) and intermittent connectivity problems due to handoffs. Consequently, TCP performance in networks having wireless links suffers from significant throughput degradation and very high interactive delays due to the unnecessary use of congestion compensation mechanisms.
Several approaches have been suggested to avoid performance degradation over wireless links where non-congestion errors predominate. For example, A Comparison of Mechanisms for Improving TCP Performance Over Wireless Links, by Hari Balakrishnan, et al., ACM SIGCOMM '96, Stanford, Calif., August 1996, discusses several. One such approach is to make the base station, which relays communication data from a source in the network to a mobile receiver, TCP aware. The base station keeps a copy of all packets forwarded to the mobile receiver until the base station is certain that the packets were received. If a packet is not received by the mobile receiver, then the mobile receiver sends to the base station the SACKS that are marked to indicate that a non-congestion related loss has occurred. Once the base station receives three duplicate marked SACKs, rather than automatically relaying these duplicate marked SACKs through the network to obtain retransmission from the source, the base station attempts to suppress the duplicate acknowledgment and retransmits a copy of the packet without invoking congestion compensation procedures. Because the base station retains copies of unacknowledged packets for multiple mobile receivers, the base station must retransmit the correct packet associated with the specific mobile receiver that failed to receive the originally transmitted packet.
The Balakrishnan scheme, however, has several shortcomings. First, in a lossy link where congestion is typically not a source of error, duplicate acknowledgments unnecessarily waste system resources and requires an unnecessary delay time until retransmission. In other words, because congestion is not the source of error and does not prohibit the first acknowledgment from being sufficient, anything more than a single acknowledgment unnecessarily taxes the system. Second, by making the base station TCP aware and requiring the base station to track the destination mobile receiver for each packet, significant buffering requirements at the base station are necessary. Furthermore, the base station must possess substantial processing capabilities to probe into the packet headers, and to classify and buffer packets according to TCP connections and process acknowledgments.